package bean;

import java.util.Date;

import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.mail.*;
import javax.mail.internet.*;

import controller.UserMgr;
import dto.ElementoBaseDTO;
import dto.PacchettoPersonaleDTO;

@ManagedBean(name="emailBean")
@RequestScoped
public class EmailSessionBean {
 
@Resource(lookup = "EMailME")
private Session mailSession;
@EJB
private UserMgr userMgr;

private static String email;
 
public void sendEmail(String to, String subject, String body) throws AddressException, MessagingException {
	
	MimeMessage message = new MimeMessage(mailSession);
	message.setFrom(new InternetAddress(mailSession.getProperty("mail.from")));
	InternetAddress[] address = {new InternetAddress(to)};
	message.setRecipients(MimeMessage.RecipientType.TO, address);
	message.setSubject(subject);
	message.setSentDate(new Date());
	message.setText(body);
	Transport.send(message);
	}

public String getEmail() {
	return email;
}

public void setEmail(String email) {
	this.email = email;
}

public void inviaPacchetto(final String emailUtente, final PacchettoPersonaleDTO p){
	if(!email.equalsIgnoreCase(userMgr.getUtenteDTO().getEmail())){
	System.out.println("Invio all'utente "+this.email+" il pacchetto "+p.getNome()+" da parte di "+emailUtente);
	final  FacesContext facesContext = FacesContext.getCurrentInstance();

	Thread t = new Thread(new Runnable() {
         public void run()
         {
        	    facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Email inviata correttamente",""));
    			try {
					sendEmail(email, "Pacchetto Travel Dream", "Hai appena ricevuto l'invito a partecipare ad un pacchetto da parte di "+emailUtente+". "
							+ "Per maggiori informazioni collegati al sito di TravelDream, recati nell'apposita area e digita il codice: "+p.getIdPacchettoPersonale()+p.getRandomcode()+" oppure"
									+ "clicca sul seguente link: http://localhost:8080/TravelDreamOnlineWeb/user/invito.xhtml?code="+p.getIdPacchettoPersonale()+p.getRandomcode());
					if(facesContext!=null) facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Email inviata correttamente",""));

    			} catch (Exception e) {
            	   if(facesContext!=null) facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Errore durante l'invio della email","Impossibile contattare il server SMTP"));
					e.printStackTrace();
				} 
    					
         }
});
	t.start();
	}
	else{
		final  FacesContext facesContext = FacesContext.getCurrentInstance();
		facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Errore durante l'invio dell'email","Non puoi inviare un pacchetto a te stesso!"));

	}
}

public void pagaGift(final String to,final String from,final ElementoBaseDTO p){
	System.out.println("Invio all'utente "+to+" il pacchetto "+p.getNome()+" da parte di "+from);
	final  FacesContext facesContext = FacesContext.getCurrentInstance();  

	Thread t = new Thread(new Runnable() {
         public void run()
         {

    			try {
					sendEmail(to, "Aggiornamento GiftList","L'utente "+from+ " ti ha regalato l'elemento "+p.getNome());
					if(facesContext!=null) facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "L'utente to è stato avvisato tramite email del regalo!",""));

    			} catch (Exception e) {
    				if(facesContext!=null) facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Errore durante l'invio della email","Impossibile contattare il server SMTP"));
					e.printStackTrace();
				}
    					
         }
});
	t.start();

}

}